# 不二掌柜：http://jxc.b2zg.cn/#/login
# 写五条功能测试用例
# 把测试用例转成web端自动化测试脚本，pytest+selenium的方式编写，执行步骤和元素抽离
"""
文件名称最好是以test开始，或者是_test结尾
创建测试类必须是Test开头，例如:TestLogin
测试方法，必须以test开头。例如:testLogin
"""

# =============================01-pytest测试用例_test============================================
"""

import  pytest
class TestDemo:

    # 类名必须Test开头
    # 测试类里面，不能有__init__(self)

    # def test02(self):
  
    #     测试用例必须是test开头的
    #     会被识别成测试用例
       
        print("test02")
    def test01(self):
        print("test01")
    def mytest(self):
       
        # mytest 不是测试用例，因为不是test开头的
      
        print("mytest")
def testfn2():
    print("testfn2")
def testfn1():
    print("testfn1")
def mytestfn():
    print("mytestfn")
       

  
# pytest执行用例顺序：按照定义好的顺序来执行
# 
# pytest用例执行：
# 【1】pytest xxx.py来执行测试用例
# 【2】pytest -s xxx.py 执行测试用例并打印print信息
# 【3】pytest xxx.py::Test类     只是执行这个文件下的这个测试用例类
# 【4】pytest xxx.py::Test类::test方法    只是执行 这一条测试用例
#      pytest -s xxx.py::Test类:: test方法    执行用例展示打印print 信息

if __name__ == '__main__':
    pytest.main(['-s','01-pytest测试用例_test.py'])
    # 等同于pytest -s 01-pytest测试用例_test.py 命令执行

"""

# =============================02-pytest配合ini文件运行==================================================
"""
import pytest
class QCYD:
    def qc1(self):
        print("我是qc1测试用例")
    def qc2(self):
        print("我是qc2测试用例")
"""


# ============================03-pytest断言====================================
"""

"""
import pytest
#用例中有断言失败，不会往下继续执行
# assert a in b  -------断言包含
# assert a == b  -------断言相等(字符串，数值)
# assert a is b  -------断言相等(布尔值,地址值)
"""
def test_get_event():
    print("查询发布会")
    actual_name="小米16发布会"
    expected_name="小米16发布会"
    assert actual_name==expected_name

def test_get_event2():
    print("查询发布会")
    actual_name="小米16发布会"
    expected_name="小米16发布会"
    assert actual_name==expected_name
def test_bool():
    print("断言布尔值")
    assert False ==True
    assert False is True

def test_order():
    print("测试订单")
#     断言订单编号
    assert  20220530110==20220530110
#     断言订单状态
    assert "已付款"=="未付款"
    print("开始断言订单金额")
#     断言订单金额
    assert 100==10

# pytest-assume:做断言使用的
# 即使用例中有断言失败的，也能继续往下执行
import  pytest
def test_order02():
    print("测试订单")
#   断言订单编号
    pytest.assume=(20220530110==20220530110)
#   断言订单状态
    pytest.assume("已付款==未付款")
    pytest("开始断言订单金额")
#   断言订单金额
    pytest.assume(100==100)
"""
# ==================04-setup和teardown=======================
# 模块和函数级是一对，类和方法级是一对。一般我们会创建测试类编写测试用例方法，
# 所以类和方法级别都是需要掌握的
# 模块级（setup_module/teardown_module）开始于模块始末，全局的，对整个.py文件起作用
# 函数级（setup_function/teardown_function） 只对函数用例生效（不在类中），对不在类中的方法起作用
# 类级（setupclass/teardown_class）只在类中前后运行一次（在类中），对单个类起作用
# 方法级（setup_dethod、teardown_method）开始于方法始末（在类中），对测试类中的测试方法起作用

# 模块级别
"""

def setup_module():
    print("这是模块级的setup方法")
def teardown_module():
    print("这是模块级的teardown方法")
def test_dem1():
    print("测试用例1")
def test_dem2():
    print("测试用例2")

# 执行顺序：这是模块级的setup方法
         #测试用例1
         #这是模块级的teardown方法
# 执行命令：pytest 04-setup和teardown.py

# ============函数级别=====
def setup_function():
    print("这是函数级别的setup方法")
def teardown_function():
    print("这是函数级别的teardown方法")
def test_demo1():
    pytest("测试用例1")
def test_demo2():
    pytest("测试用例2")
# 这是函数级别的setup方法
# 测试用例1
# 这是函数级别的teardown方法
# 这是函数级别的setup方法
# 测试用例2
# 这是函数级别的teardown方法
# 执行命令：pytest 04-setup和teardown.py
"""


# =======类级别
"""
class TestDemo:   # 类标题必须是Test开头的
    def setup_class(self):
        print("这是类级别的setup方法")
    def teardown_class(self):
        print("这是类级别的teardown方法")
#     测试用例1
    def test_demo1(self):  # 测试用例必须是test开头的
        print("这是demo1测试用例")
    def test_demo2(self):
        print("这是demo2测试用例")
    def test_demo3(self):
        print("这是demo3测试用例")
# setup_class/teardown_class：都是通过类来控制的，整篇类只会执行一次
# 这是类级别的setup方法
# 这是demo1测试用例
# 这是demo2测试用例
# 这是demo3测试用例
# 这是类级别的teardown方法
"""

# ========在类中的方法级别
"""
class TestDemo2:
    def setup_method(self):
        print("这是方法级别的setup方法")
    def teardown_method(self):
        print("这是方法级别的teardown方法")
    def test_demo1(self):
        print("这是demo1测试用例")
    def test_demo(self):
        print("这是demo2测试用例")
    def test_demo3(self):
        print("这是demo3测试用例")
# 为每条测试用例都会执行一次setup和teardown
# 
# 执行顺序：
# 这是方法级别的setup方法
# 这是demo1测试用例
# 这是方法级别的teardown方法
# 
# 这是方法级别的setup方法
# 这是demo2测试用例
# 这是方法级别的teardown方法
# 
# 这是方法级别的setup方法
# 这是demo3测试用例
# 这是方法级别的teardown方法
# 
# 执行命令：pytest 04-setup和teardown.py
"""










